home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr08
/
frchkdoc.zip
/
FRCHK.DOC
< prev
Wrap
Text File
|
1993-06-17
|
18KB
|
449 lines
===================> FRCHK TEST <==================================
=================== Operational details ============================
*** Where FRCHK looks for PAF data ***
FRCHK is invoked by typing "frchk" at the MS-DOS command prompt.
By default, FRCHK looks in the current drive and directory (the same
one you would see if you did a DOS "dir" command) for PAF data. If
you want to check data in a drive or directory other than the current
one, you have three options:
1) Type the name of the drive or directory on the command line
after "frchk". If you type a directory name, it MUST be
followed by a trailing slash. Examples:
C>frchk (checks current directory)
C>frchk A: (checks data on drive A)
C>frchk \paf\ (checks data in "\paf" directory)
2) Use MS-DOS commands to change the default drive and directory
to the one you want before running FRCHK. Then type "frchk"
without arguments.
3) Use "config" to change the default data path to the one you
want. Note that if you do this, FRCHK will always look in
that same path unless you override the default by typing in a
command line argument.
*** Where FRCHK creates scratch files ***
During several phases of FRCHK a scratch file may need to be created.
By default, FRCHK creates scratch files in the current directory.
You change the default scratch path using "config", or you may
specify a scratch path from the command line by using the "-s" option.
To use this option you type "-s" followed by a scratch path (with
a trailing slash if the path is a directory). Examples:
C>frchk -sA: (puts scratch files on drive A)
C>frchk -s\temp\ (puts scratch files in directory \temp)
Note that there is NO SPACE after the "-s".
*** Suppressing informational messages (-q) ***
Not all messages issued by FRCHK are errors. Some are merely
informational, or tell you what FRCHK is doing at the moment. If you
want FRCHK to suppress these informational messages, use the "-q"
option (meaning "quiet"). With this option set, the only message
you will see is the sign on message telling where FRCHK is looking
and the date and time, unless FRCHK finds errors. Errors are reported
regardless of whether the "-q" flag is set.
*** Saving error messages ***
If you want to save the output from FRCHK, you may use MS-DOS
re-direction commands as follows:
1) A single right arrow followed by a file name will create a
file by that name (destroying any previous file by the same name),
and store all FRCHK messages there.
2) A double right arrow followed by a file name will append FRCHK
messages to the end of that file without destroying its previous
contents.
Examples:
frchk > frchk.lst (Creates "frchk.lst" and store messages there)
frchk >> frchk.lst (Appends messages to the end of "frchk.lst")
*** Stopping and starting screen output ***
If you are not re-directing output to a file as described above, you
may stop and start FRCHK check output using the Control-S key.
*** Printing FRCHK messages ***
There are 3 ways to print the output from FRCHK:
1) Re-direct the output directly to the printer.
frchk > LPT1:
2) Re-direct output to a file and then print it later.
frchk > frchk.lst
print frchk.lst
3) Use the Control-P key to turn on printing at the same time
that messages are being written to the screen. This is a toggle
key which turns printer output on and off.
=================== End of file check ==============================
*** The following checks are performed on each of the Family
*** Records files:
- indiv2.dat
- marr2.dat
- name2.dat
- notes2.dat
- namadd2.dat
- reptitl2.dat
*** If any of the first three programs cannot be opened, FRCHK aborts
*** without doing further checking.
* The number of record count in each file header should be less than
or equal to 65,535. If so, the following message is printed to
show how many records are in the file:
-> "%s: Contains %ld record(s)."
or (if above 65,535)
-> "%s: Invalid number of records (%ld) - 65535 assumed."
* The first 21 bytes of each file header should be in the following
format:
- The first byte must be a space.
- The next twenty bytes must be either spaces or numeric digits.
- The 10 bytes after the first byte, when taken as an ASCII
number (with a space terminating the number), form the record
count. This number should be less than or equal to 65,535.
- The next 10 bytes when taken as an ASCII number (with a space
terminating the number), form the free list header.
. This number should be less than or equal to 65,535, and
less than or equal to the record count.
-> "%s: File header may be corrupted."
* The number of physical records in the file is calculated based on the
actual size of the file and compared to the logical record count stored
in the file header, which should be the same.
-> "%s: File size indicates there are %ld record(s).",
============= Individual file pointer and data range tests ==============
* The following pointers are checked to make sure they do not point beyond
end of file:
ptr name file it points to
"Surname", Name
"Given name 1", Name
"Given name 2", Name
"Given name 3", Name
"Title", Name
"Birth place 1", Name
"Birth place 2", Name
"Birth place 3", Name
"Birth place 4", Name
"Christen place 1", Name
"Christen place 2", Name
"Christen place 3", Name
"Christen place 4", Name
"Death place 1", Name
"Death place 2", Name
"Death place 3", Name
"Death place 4", Name
"Burial place 1", Name
"Burial place 2", Name
"Burial place 3", Name
"Burial place 4", Name
"Baptism temple", Name
"Endowment temple", Name
"Sealing temple", Name
"Older sibling", Individual
"Own marriage", Marriage
"Parents marriage", Marriage
"Notepad", Notes
-> "RIN = %u, %s pointer out of range: %u."
* Each of the following dates in the individual file is checked for
reasonableness:
"birth"
"christen"
"death"
"burial"
"baptism"
"endowment"
"sealing"
If the year is less than 100 or greater than 2000, or if the month
value is greater than 24 (values 13 through 24 have special meaning
in PAF), or if the day of the month is greater than appropriate
for the specified month (29 Feb is always allowed), one of the
following messages will occur:
-> "RIN = %u, bad %s date: year = %u."
-> "RIN = %u, bad %s date: month = %d."
-> "RIN = %u, bad %s date: day = %d when month = %d."
* The sex field is checked to make sure it is null, a space,
or 'M' or 'F'.
-> "RIN = %u, bad sex field: '%c' (%02x hex)."
* An individual should not have an older sibling pointer unless he has a
parent's marriage pointer.
-> "RIN %u has older sibling %u, but no parent's marriage."
* An individual should not have an individual marriage pointer and a
parent's marriage pointer that are the same.
-> "RIN %u has same ptr for individual and parent's marriage: %u"
============= Marriage file pointer and data range tests ==============
* The following pointers are checked to make sure they do not point beyond
end of file:
ptr name file it points to
"Husband", Individual
"Wife", Individual
"Child", Individual
"W to H sealing temple", Name
"Husband's other marriage", Marriage
"Wife's other marriage", Marriage
-> "MRIN = %u, %s pointer out of range: %u."
* Each of the following dates in the marriage file is checked for
reasonableness:
"marriage"
"wife to husband sealing"
If the year is less than 100 or greater than 2000, or if the month
value is greater than 24 (values 13 through 24 have special meaning
in PAF), or if the day of the month is greater than appropriate
for the specified month (29 Feb is always allowed), one of the
following messages will occur:
-> "MRIN = %u, bad %s date: year = %u."
-> "MRIN = %u, bad %s date: month = %d."
-> "MRIN = %u, bad %s date: day = %d when month = %d."
* The divorce field is checked to make sure it is null, a space,
or 'Y' or 'N'.
-> "MRIN = %u, bad divorce field: '%c' (%02x hex)."
* A marriage record should not have a husband's other marriage pointer
unless it also has a husband pointer. Similarly, it should not have
a wife's other marriage pointer unless it has a wife pointer.
-> "MRIN %u has husband's other marriage ptr (%u) but no husband."
or
-> "MRIN %u has wife's other marriage ptr (%u) but no wife."
================== Name file integrity tests =======================
* Each name record should have a trailing null in the data portion.
-> "Name record %u, name = "%s""
-> " No trailing null character."
* The data portion of each name record should be printable ASCII
characters up to the trailing null character.
-> "Name record %u, name = "%s""
-> " Non-ASCII characters in name."
* Each name found during the traversal should be lexically greater
than the previous one.
-> "Name record %u, name = "%s""
-> " Out of order in tree."
-> " Previous tree record is %u, name = "%s""
* During the traversal, each name record should be visited only once.
If a record is encountered that has already been visited, the
following message is displayed:
-> "Multiple path to name record %u"
* Each of the two links in the binary name tree should be null or point
within the name file.
-> "Name record = %u, left link out of range: %u."
or
-> "Name record = %u, right link out of range: %u."
* Every record in the name file should have been visited during the
tree traversal.
-> "There are %u records not linked in the name tree."
* If any errors are found that affect the integrity of the binary tree,
the following message is displayed to indicate that the name file needs
to be re-built:
-> "===> Name file internal pointers are not consistent! <===\n");
* The following informational message is issued to indicate the maximum
depth of the name tree:
-> "Maximum depth of name tree is %d\n", max_tree_depth);
================== Free list integrity checks ======================
*** Both the individual file and the marriage file use a free list
*** scheme for keeping track of deleted records.
* The free list header should point within the file.
-> "Bad RIN free list header: %ld"
or
-> "Bad MRIN free list header: %ld"
* All links in the free list should point to records within the file.
-> "RIN #%u has bad free list pointer: %ld"
or
-> "MRIN #%u has bad free list pointer: %ld"
* The free list should not loop back onto itself.
-> "Deleted RIN chain is an endless loop."
or
-> "Deleted MRIN chain is an endless loop."
* All of the records on the free list should be marked as deleted.
-> "The following RINs are on the free list but not deleted:"
or
-> "The following MRINs are on the free list but not deleted:"
* All deleted records should be on the free list.
-> "The following RINs are deleted but not on the free list:"
or
-> "The following MRINs are deleted but not on the free list:"
================= Note chain cross-link tests ======================
* All notepad pointers within the individual file or in the note file
should point within the note file.
-> "RIN = %u, notepad pointer out of range: %u."
or
-> "Note record = %u, notepad pointer out of range: %u."
* No note record should be pointed to from more than one place, i.e.,
from an individual record or another note record.
-> "Individual %u is cross-linked to note %u."
or
-> "Note %u is cross-linked to note %u."
* There should be no note records that are not pointed to by an
individual record or another note record.
-> "Note record %u is not linked into any note chain."
or
-> "Note records %u through %u are not linked into any note chain."
=================== Sibling chain tests ===========================
* Any marriage record with a youngest child pointer should have a
corresponding individual (the child) pointing back with its
parent's marriage pointer.
-> "MRIN %u has dangling child ptr: %u"
-> "The following RINs have parent's marriage ptrs to MRIN %u"
* There should be no more than 30 children (20 on the Apple) pointing
to a particular marriage record with their parent's marriage ptr.
-> "Too many parent's marriage ptrs pointing to MRIN %u:"
-> "The following RINs have parent's marriage ptrs to MRIN %u"
* No individual parent's marriage ptr should point at a deleted marriage.
-> "Found dangling ptrs pointing to deleted MRIN %u"
-> "The following RINs have parent's marriage ptrs to MRIN %u"
* The chain of siblings pointing to a particular parent's marriage
should not be a loop.
-> "Bad sibling chain starting at MRIN %u, child ptr %u"
-> "The chain is an endless loop."
-> "The following RINs have parent's marriage ptrs to MRIN %u"
* All members of a sibling chain should point back to the same parent's
marriage.
-> "Bad sibling chain starting at MRIN %u, child ptr %u"
-> "RIN %u parent's marriage ptr does not point back."
-> "The following RINs have parent's marriage ptrs to MRIN %u"
* All individual pointing to the same parent's marriage should be part
of the associated sibling chain.
-> "Bad sibling chain starting at MRIN %u, child ptr %u"
-> "The following RINs were not found in the children chain:"
-> "The following RINs have parent's marriage ptrs to MRIN %u"
* None of the children in a sibling chain should be the husband or the
wife of their parent's marriage.
-> "MRIN %u has a child that is also the husband: %u"
or
-> "MRIN %u has a child that is also the wife: %u"
=================== Marriage chain tests ===========================
*** The following tests apply only to marriage records that are
*** pointed to by an individual record (individual marriage ptr),
*** or are part of a husband or wife other marriage chain (which
*** must begin with a marriage record pointed to by an individual
*** marriage pointer.
* Individual marriage pointers should not point to deleted marriage
records.
-> "MRIN %u has been deleted." (only if MRIN deleted)
-> "Dangling individual marriage ptrs to MRIN %u found in these RINs:"
* Marriage records pointed to by an individual marriage pointer should
point back with either the husband or wife pointer.
-> "Dangling individual marriage ptrs to MRIN %u found in these RINs:"
* When an individual record points to a marriage record which points back
with the husband ptr, the sex of the individual record should be male.
-> "Husband in MRIN %u (RIN %u) not male, sex = '%c'"
* When an individual record points to a marriage record which points back
with the wife ptr, the sex of the individual record should be female.
-> "Wife in MRIN %u (RIN %u) not female, sex = '%c'"
* Other marriage chains should not loop back onto themselves.
-> "Husband's other marriage chain from MRIN %u is an endless loop."
or
-> "Wife's other marriage chain from MRIN %u is an endless loop."
* No other marriage ptr should point to a deleted marriage.
-> "MRIN %u husband other marriage ptr points to deleted MRIN %u"
or
-> "MRIN %u wife other marriage ptr points to deleted MRIN %u"
* The marriages in an other marriage chain should all have the
same husband or wife ptr.
-> "Multiple husbands in other marriage chain:"
-> " MRIN %u, husband = %u"
-> " MRIN %u, husband = %u"
or
-> "Multiple wifes in other marriage chain:"
-> " MRIN %u, wife = %u"
-> " MRIN %u, wife = %u"
* Other marriage chains of the same type (i.e. husband or wife) should
not overlap. I.e., there should be no cross-links between such chains.
-> "Husband's other marriage chain from MRIN %u cross-linked at MRIN %u"
or
-> "Wife's other marriage chain from MRIN %u cross-linked at MRIN %u"
* There should be no more than 60 marriages (20 for the Apple) in an other
marriage chain.
-> "Found %d marriages in husband's other marriage chain from MRIN %u."
or
-> "Found %d marriages in wife's other marriage chain from MRIN %u."
* Any marriage records which are not part of a husband's marriage chain
should not have a husband pointer or a husband's other marriage ptr.
-> "MRIN %u has dangling husband ptr: %u"
or
-> "MRIN %u has dangling husband's other marriage ptr: %u"
* Any marriage records which are not part of a wife's marriage chain
should not have a wife pointer or a wife's other marriage ptr.
-> "MRIN %u has dangling wife ptr: %u"
or
-> "MRIN %u has dangling wife's other marriage ptr: %u"